Red Green Tree
資料
Red Green Syntax Trees - an Overview - Plingdollar
Persistence, façades and Roslyn’s red-green trees | Fabulous adventures in coding
Red-Green Trees - Yaakov's blog
rust-analyzer/docs/dev/syntax.md at master · rust-lang/rust-analyzer
rust-analyzerのドキュメント
Ruby Parser開発日誌 (19) - 最高の構文木の設計 2024年版 - かねこにっき
最高の構文木の設計 2024年版 - Speaker Deck
貴重な日本語資料lemonadern.icon
Rome will be written in Rust 🦀 (archive from web.archive.org)
Romeプロジェクトがなくなってサイトごと消えてる
いちおう日本語訳:【Rome】RomeはJavaScriptをやめてRustにするってよ #日本語訳 - Qiita
実装
Roslyn
C#
SwiftSyntax
SwiftSyntax | Documentation
https://github.com/swiftlang/swift-syntax
libsyntax (Swift ?)
https://github.com/swiftlang/swift/tree/5e2c815edfd758f9b1309ce07bfc01c4bc20ec23/lib/Syntax
Rowan
rust-analyzer で使われている
cstree
https://github.com/domenicquirl/cstree
利用箇所
C# Compiler
Swift ?
rust-analyzer
Biome (Rome)
自前の実装を持っているっぽい?
関連の資料
Pure AST based linting sucks | RDambrosio
Lint を AST でやろうとすると起こる問題点がたくさん記してある
JavaScript Parser In Rust を読む
Rowan の話が出てくる
Xにおける言及
@zakuro9715: Roslyn で発明された red green trees、lossless syntax trees と呼ばれたりもしていて、rust-analyzer とか swift とか biome(rome) とか最近の言語処理系で結構使われているっぽいが、その割には解説が少ない
@zakuro9715: 不完全なコードを表現できるとか、木の一部分を差し替えられるとかのメリットがあるので、ソースコードの変更があったときに変更部分だけパースして差し替えたりできる。
@zakuro9715: Red Green Trees は結構面白くて、外部に露出する木のノード(RedNode)が内部ノード(GreenNode)を持っていて、Red は親の Red を持ち、Green は子の Green とトークンとかを持つ。
Red はボトムアップに辿れて Green はトップダウンに走査できる。
最初はだからどうしたと思ったけど、たしかに便利
@zakuro9715: Red Green なのは使っていたマーカーの色で意味はないらしい。分かりづらいので、実装ではred green の名前ではなくなっていたりするが、 rust-analyzer のライブラリである rowan では何故か green だけが残っているので、経緯を知らないと名前の意味がわからない